; KFM's constants and state file.
; There are comments scattered through this file, so you may like to
; take a look if would like to learn more about the cns.

; これはKFMの定数と状態のファイルです。
; このファイルの中には注釈が散らされているので、CNSを習いたいお方は
; 読んでみたらいいです。

[Data]
;Amount of life to start with
;体力ゲージの初期値
life = 1200
;Amount of power stocks to have (divided by 1000). Defaults to 3000
power = 3000
;attack power (more is stronger)
;攻撃ダメージ
attack = 100
;defensive power (more is stronger)
;体力パワー
defence = 100
;Percentage to increase defense everytime player is knocked down
fall.defence_up = 50
;Time which player lies down for, before getting up
liedown.time = 60
;Number of points for juggling
airjuggle = 15
;Default hit spark number for HitDefs
sparkno = 2
;Default guard spark number
guard.sparkno = 40
;1 to enable echo on KO
KO.echo = 0
;Volume offset (negative for softer)
volume = 0
;Variables with this index and above will not have their values
;reset to 0 between rounds or matches. There are 60 int variables,
;indexed from 0 to 59, and 40 float variables, indexed from 0 to 39.
;If omitted, then it defaults to 60 and 40 for integer and float
;variables repectively, meaning that none are persistent, i.e. all
;are reset. If you want your variables to persist between matches,
;you need to override state 5900 from common1.cns.
IntPersistIndex = 60
FloatPersistIndex = 40

[Size]
xscale = 1           ;Horizontal scaling factor.
yscale = 1           ;Vertical scaling factor.
ground.back = 15     ;Player width (back, ground)
ground.front = 16    ;Player width (front, ground)
air.back = 12        ;Player width (back, air)
air.front = 12       ;Player width (front, air)
height = 60          ;Height of player (for opponent to jump over)
attack.dist = 160    ;Default attack distance
proj.attack.dist = 90 ;Default attack distance for projectiles
proj.doscale = 0     ;Set to 1 to scale projectiles too
head.pos = -5, -90   ;Approximate position of head
mid.pos = -5, -60    ;Approximate position of midsection
shadowoffset = 0     ;Number of pixels to vertically offset the shadow
draw.offset = 0,0    ;Player drawing offset in pixels (x, y)

[Velocity]
walk.fwd  = 2.4      ;Walk forward
walk.back = -2.2     ;Walk backward
run.fwd  = 4.6, 0    ;Run forward (x, y)
run.back = -4.5,-3.8 ;Hop backward (x, y)
jump.neu = 0,-8.4    ;Neutral jumping velocity (x, y)
jump.back = -2.55    ;Jump back Speed (x, y)
jump.fwd = 2.5       ;Jump forward Speed (x, y)
runjump.back = -2.55,-8.1 ;Running jump speeds (opt)
runjump.fwd = 4,-8.1      ;.
airjump.neu = 0,-8.1      ;.
airjump.back = -2.55      ;Air jump speeds (opt)
airjump.fwd = 2.5         ;.

[Movement]
airjump.num = 1      ;Number of air jumps allowed (opt)
airjump.height = 35  ;Minimum distance from ground before you can air jump (opt)
yaccel = .44         ;Vertical acceleration
stand.friction = .85  ;Friction coefficient when standing
crouch.friction = .82 ;Friction coefficient when crouching

;---------------------------------------------------------------------------
; Variable usage:
; This is a record of the variables that KFM uses. Keeping a record of your
; variable usage helps you avoid careless mistakes later.
; var(1)  - Used in kfm.cmd for combo condition (updated every tick)
; var(2)  - Used in Kung Fu Throw (state 800) to remember if fwd was being
;           held (remembered from state 800 through state 810).

[Command]
name = "a"
command = a

[statedef -1]

[state -1]
type = changestate
value = 5150
triggerall = roundstate = 0
trigger1 = 1

[statedef -2]

[state ]
type = VarSet
trigger1 = !ishelper
sysvar(0) = 0              ;<---------难度增加开关,1开启0关闭
ignorehitpause = 1

[state ]
type = LifeAdd
triggerall = !ishelper
trigger1 = palno = 1
trigger1 = helper(600),gethitvar(damage) = [10,1000]
trigger2 = palno = 2
trigger2 = helper(600),gethitvar(damage) = [100,800]
trigger3 = palno = 3
trigger3 = helper(600),gethitvar(damage) = [250,380]
value = -50
ignorehitpause = 1

[state ]
type = LifeAdd
triggerall = !ishelper
triggerall = palno = 4
trigger1 = life = [601,1200]
trigger1 = helper(600),gethitvar(damage) = [250,400]
trigger2 = life = [0,600]
trigger2 = helper(600),gethitvar(damage) = [20,99]
value = -50
ignorehitpause = 1

[state ]
type = LifeAdd
triggerall = !ishelper
triggerall = palno = 5
triggerall = (enemy,vel x >= 1) && (enemy,vel y >= 1)
trigger1 = life = [801,1200]
trigger1 = helper(600),gethitvar(damage) = [400,560]
trigger2 = life = [401,800]
trigger2 = helper(600),gethitvar(damage) = [780,900]
trigger3 = life = [0,400]
trigger3 = helper(600),gethitvar(damage) = [110,270]
value = -50
ignorehitpause = 1

[state ]
type = LifeAdd
triggerall = !ishelper
triggerall = palno = 6
triggerall = (enemy,vel x >= 1) && (enemy,vel y >= 1)
triggerall = enemy,hitdefattr = SCA,AA,AT,AP
triggerall = !helper(600),gethitvar(fall.damage) 
trigger1 = life = [801,1200]
trigger1 = helper(600),gethitvar(damage) = [400,560]
trigger2 = life = [401,800]
trigger2 = helper(600),gethitvar(damage) = [780,900]
trigger2 = enemy,pos x - pos x > 10
trigger2 = enemy,pos Y - pos y > 7
trigger3 = life = [0,400]
trigger3 = helper(600),gethitvar(damage) = [110,270]
trigger3 = enemy,pos x < pos x - 7
trigger3 = enemy,pos y < pos y - 15
value = -50
ignorehitpause = 1

[state ]
type = LifeAdd
triggerall = !ishelper
trigger1 = roundstate != 2
trigger2 = helper(1100),sysvar(1) != 20*gametime*gametime
trigger3 = helper(600),gethitvar(damage) != [0,1050]
trigger4 = helper(600),gethitvar(fall.damage) != [0,1000]
trigger5 = helper(1000),sysvar(1) != 20*gametime*gametime
trigger6 = enemy,stateno = 5150 || enemy,stateno = 120
value = lifemax - life
ignorehitpause = 1

[state ]
type = helper
trigger1 =!ishelper
trigger1 =!numhelper(600)
name = "Koishi-last explod"
helpertype = Player
ID = 600
stateno = 600
pausemovetime = 2147483647
supermovetime = 2147483647
ignorehitpause = 1

[state ]
type = helper
trigger1 =!ishelper
trigger1 =!numhelper(700)
name = "Koishi-last explod1"
helpertype = Player
ID = 700
stateno = 700
pausemovetime = 2147483647
supermovetime = 2147483647
ignorehitpause = 1

[state ]
type = helper
trigger1 =!ishelper
trigger1 =!numhelper(800)
name = "Koishi-last explod2"
helpertype = Player
ID = 800
stateno = 800
pausemovetime = 2147483647
supermovetime = 2147483647
ignorehitpause = 1

[state ]
type = helper
trigger1 =!ishelper
trigger1 =!numhelper(900)
name = "Koishi-last explod3"
helpertype = Player
ID = 900
stateno = 900
pausemovetime = 2147483647
supermovetime = 2147483647
ignorehitpause = 1

[state ]
type = helper
trigger1 =!ishelper
trigger1 =!numhelper(1000)
name = "Koishi-last explod4"
helpertype = Player
ID = 1000
stateno = 1000
pausemovetime = 2147483647
supermovetime = 2147483647
ignorehitpause = 1

[state ]
type = helper
trigger1 =!ishelper
trigger1 =!numhelper(1100)
name = "Koishi-last explod5"
helpertype = Player
ID = 1100
stateno = 1100
pausemovetime = 2147483647
supermovetime = 2147483647
ignorehitpause = 1

[state ]
type = SelfState
trigger1 = ishelper(600)
value  = 600
ignorehitpause = 1

[state ]
type = SelfState
trigger1 = ishelper(700)
value  = 700
ignorehitpause = 1

[state ]
type = SelfState
trigger1 = ishelper(800)
value  = 800
ignorehitpause = 1

[state ]
type = SelfState
trigger1 = ishelper(900)
value  = 900
ignorehitpause = 1

[state ]
type = SelfState
trigger1 = ishelper(1000)
value  = 1000
ignorehitpause = 1

[state ]
type = SelfState
trigger1 = ishelper(1100)
value  = 1100
ignorehitpause = 1

[state ]
type = SelfState
trigger1 = !ishelper
value  = 5150
ignorehitpause = 1

[statedef -3]

[state ]
type = varSet
trigger1 = ishelper(1100)||ishelper(1000)
sysvar(1) = 20*gametime*gametime
ignorehitpause = 1

;This controller plays a sound everytime KFM lands from a jump, or
;from his back-dash.
[State -3, Landing Sound]
type = PlaySnd
triggerall = 0
triggerall = Time = 1
trigger1 = stateno = 52 ;Jump land
trigger2 = stateno = 106 ;Run-back land
value = 40, 0

[statedef 5150]
type = U
movetype = U
physics = U
ctrl = 0
hitdefpersist = 1
movehitpersist = 1

[state ]
type = Changeanim
triggerall = !ishelper
trigger1 = anim != 25200
value = 25200
ignorehitpause = 1

[state ]
type = VelSet
trigger1 = !ishelper
x = ifelse((gametime%10=[0,4]),5,-5)
y = 0
ignorehitpause = 1

[state ]
type = PosSet
trigger1 = !ishelper
y = -100
ignorehitpause = 1

[State ]
type = Playerpush
trigger1 = !ishelper
value = 0
ignorehitpause = 1

[statedef 600]
type = U
movetype = U
physics = U
ctrl = 0
hitdefpersist = 1
movehitpersist = 1

[state ]
type = Changeanim
triggerall = ishelper(600)
trigger1 = anim != 1201
value = 1201
ignorehitpause = 1

[state ]
type = PosSet
trigger1 = ishelper(600)
y = -100
x = 100
ignorehitpause = 1

[state ]
type = NotHitBy
triggerall = ishelper(600)
trigger1 = gethitvar(damage)
value = SCA,AA,AT,AP
time = 100
ignorehitpause = 1

[state ]
type = LifeSet
triggerall = ishelper(600)
trigger1 = root,sysvar(0) = 0
value = lifemax
ignorehitpause = 1

[State ]
type = Playerpush
trigger1 = ishelper(600)
value = 0
ignorehitpause = 1

[statedef 700]
type = U
movetype = U
physics = U
ctrl = 0
hitdefpersist = 1
movehitpersist = 1

[state ]
type = Changeanim
triggerall = ishelper(700)
trigger1 = anim != 1600
value = 1600
ignorehitpause = 1

[state ]
type = PosSet
trigger1 = ishelper(700)
y = 0
x = root,pos x
ignorehitpause = 1

[state ]
type = NotHitBy
trigger1 = ishelper(700)
value = SCA,AA,AT,AP
ignorehitpause = 1

[state ]
type = LifeSet
trigger1 = ishelper(700)
value = lifemax
ignorehitpause = 1

[State ]
type = Playerpush
trigger1 = ishelper(700)
value = 0
ignorehitpause = 1

[statedef 800]
type = U
movetype = U
physics = U
ctrl = 0
hitdefpersist = 1
movehitpersist = 1

[state ]
type = Changeanim
triggerall = ishelper(800)
trigger1 = anim != 1601
value = 1601
ignorehitpause = 1

[state ]
type = PosSet
trigger1 = ishelper(800)
y = -50
x = -50
ignorehitpause = 1

[state ]
type = NotHitBy
trigger1 = ishelper(800)
value = SCA,AA,AT,AP
ignorehitpause = 1

[state ]
type = LifeSet
trigger1 = ishelper(800)
value = lifemax
ignorehitpause = 1

[State ]
type = Playerpush
trigger1 = ishelper(800)
value = 0
ignorehitpause = 1

[statedef 900]
type = U
movetype = U
physics = U
ctrl = 0
hitdefpersist = 1
movehitpersist = 1

[state ]
type = Changeanim
triggerall = ishelper(900)
trigger1 = anim != 4500
value = 4500
ignorehitpause = 1

[state ]
type = PosSet
trigger1 = ishelper(900)
y = -150
x = -100
ignorehitpause = 1

[state ]
type = NotHitBy
trigger1 = ishelper(900)
value = SCA,AA,AT,AP
ignorehitpause = 1

[state ]
type = LifeSet
trigger1 = ishelper(900)
value = lifemax
ignorehitpause = 1

[State ]
type = Playerpush
trigger1 = ishelper(900)
value = 0
ignorehitpause = 1

[statedef 1000]
type = U
movetype = U
physics = U
ctrl = 0
hitdefpersist = 1
movehitpersist = 1

[state ]
type = Changeanim
triggerall = ishelper(1000)
trigger1 = anim != 11000
value = 11000
ignorehitpause = 1

[state ]
type = statetypeset
trigger1 = ishelper(1000)
movetype = A
ignorehitpause = 1

[state ]
type = PosSet
trigger1 = ishelper(1000)
y = -50
x = 0
ignorehitpause = 1

[state ]
type = NotHitBy
trigger1 = ishelper(1000)
value = SCA,AA,AT,AP
ignorehitpause = 1

[state ]
type = LifeSet
trigger1 = ishelper(1000)
value = lifemax
ignorehitpause = 1

[State ]
type = Playerpush
trigger1 = ishelper(1000)
value = 0
ignorehitpause = 1

[State ]
type = Hitdef
trigger1 = ishelper(1000)
attr = SCA, AA, AT, AP
damage = enemy,lifemax
hitflag = 
guardflag = 
pausetime = 0,0
numhits = 0
priority = 7, hit
sparkno = -1
guard.sparkno = -1
p2stateno = 5110
p2getp1state = 0
fall.damage = enemy,lifemax
fall = 1
fall.recover = 0
ignorehitpause = 1

[statedef 1100]
type = U
movetype = U
physics = U
ctrl = 0
hitdefpersist = 1
movehitpersist = 1

[state ]
type = Changeanim
triggerall = ishelper(1100)
trigger1 = anim != 1350
value = 1350
ignorehitpause = 1

[state ]
type = statetypeset
trigger1 = ishelper(1100)
movetype = A
ignorehitpause = 1

[state ]
type = PosSet
trigger1 = ishelper(1100)
y = -50
x = 110
ignorehitpause = 1

[state ]
type = NotHitBy
trigger1 = ishelper(1100)
value = SCA,AA,AT,AP
ignorehitpause = 1

[state ]
type = LifeSet
trigger1 = ishelper(1100)
value = lifemax
ignorehitpause = 1

[State ]
type = Playerpush
trigger1 = ishelper(1100)
value = 0
ignorehitpause = 1

[State ]
type = Reversaldef
trigger1 = ishelper(1100)
reversal.attr = SCA, AA, AT, AP
damage = enemy,lifemax
hitflag = 
guardflag = 
pausetime = 0,0
numhits = 0
priority = 7, hit
sparkno = -1
guard.sparkno = -1
p2stateno = 5070
p2getp1state = 0
fall.damage = enemy,lifemax
fall = 1
fall.recover = 0
ignorehitpause = 1